Ext.namespace('zr.dms');

/**
 * 在线编辑窗口
 */
zr.dms.OnlineEditWindow = function(config) {
	var objHtml = "<object id='WebOfficeObj' height='100%' width='100%' style='LEFT: 0px; TOP: 0px'  classid='clsid:E77E049B-23FC-4DB8-B756-60529A35FAD5' codebase='"
			+ context + "/js/weboffice_v6.0.5.0.cab#Version=6,0,5,0'>";
	objHtml += "<param name='TitlebarColor' value='7898C2'/><param name='_ExtentX' value='6350'><param name='_ExtentY' value='6350'>";
	objHtml += "</object>";

	var tb = new Ext.Toolbar({
				id : 'toolbar',
				enableOverflow : true,
				items : [{
							text : '打印',
							id : 'tbPrint',
							iconCls : 'print',
							handler : function() {
								var webObj = document
										.getElementById("WebOfficeObj");
								webObj.PrintDoc(1);
							}
						}, '-', {
							text : '保存',
							id : 'tbSave',
							iconCls : 'save',
							scrop : this,
							handler : this.handleSave
						}, '-', {
							text : '返回',
							id : 'tbBack',
							iconCls : 'back',
							scrop : this,
							handler : this.handleBack
						},'-','<a title=\"若在线编辑控件未自动安装请点击下载并安装\" onclick=\"downLoad();\" href=\'javascript:void(0)\'>下载控件</a>']
			});
	Ext.apply(this, config);
	zr.dms.OnlineEditWindow.superclass.constructor.call(this, {
				id : 'onlineEditWindow',
				closeAction : 'close',
				maximizable : true,
				layout : 'fit',
				width : 1000,
				height : 600,
				modal : true,
				title : '在线编辑',
				tbar : tb,
				html : objHtml,
				listeners : {
					close : function() { // By default, "this" will be the
						// object that fired the event.
						var wdsxForm = Ext.getCmp("wdsxForm");
						if (wdsxForm) {
							wdsxForm.loadData(
									Ext.getCmp("onlineEditWindow").fileId, Ext
											.getCmp("onlineEditWindow").objId,this.openType);
						} else {

						}

						Ext.getCmp("fileListGrid").reloadList();
						try {
							document.all.WebOfficeObj.Close();
						} catch (ex) {
						}
					},
					beforeshow : function() {
						if (this.purviewArray.indexOf('0') > -1
								&& this.purviewArray.indexOf('1') == -1) {
							Ext.getCmp("tbSave").disable();
						}
					}
				}

			});
};

Ext.extend(zr.dms.OnlineEditWindow, Ext.Window, {
			/** 当前所在目录id */
			currentfolderid : null,
			/** 文件表记录id */
			fileId : null,
			/** 文件对象id */
			objId : null,
			/** 文件类型 */
			fileType : null,
			/** 打开类型（自己的还是授权的）*/
			openType: null,
			/** 权限集合 */
			purviewArray : null,
			/** 确定按钮事件处理器 */
			okHandler : null,
			/** 取消按钮事件处理器 */
			cancelHandler : null,
			/** 事件触发时对象的工作域 */
			scope : null,

			/**
			 * 显示窗口
			 */
			showWindow : function(objId, fileId, currentfolderid,openType) {
				this.objId = objId;
				this.fileId = fileId;
				this.openType = openType;
				this.currentfolderid = currentfolderid;
				this.show();
				document.all.WebOfficeObj.ShowToolBar = false;
				document.all.WebOfficeObj.LoadOriginalFile(uploadContext
								+ "/app/dms.do?method=download&fk_annex_id="
								+ fileId + "&fileType=latestversion",
						this.fileType);
			},
			/*
			 * 处理“保存”按钮点击事件
			 */
			handleSave : function(action) {
				try {
					var webObj = document.getElementById("WebOfficeObj");
					webObj.OptionFlag &= 0xff7f;
					webObj.HttpInit(); // 初始化Http引擎
					// 添加相应的Post元素
					// webObj.HttpAddPostString("filename", filename);
					webObj.HttpAddPostString("fk_annex_id", Ext
									.getCmp("onlineEditWindow").fileId);
					webObj.HttpAddPostString("objid", Ext
									.getCmp("onlineEditWindow").objId);
					webObj
							.HttpAddPostString(
									"currentfolderid",
									Ext.getCmp("onlineEditWindow").currentfolderid);
					webObj.HttpAddPostCurrFile("DocContent", "");
					var returnValue = webObj.HttpPost(uploadContext
							+ "/app/onlineedit.do?method=save")
							+ ""; // 判断上传是否成功
					if ("succeed" == returnValue) {
						alert("文件保存成功");
						var hisList = Ext.getCmp("historyListGrid");
						if (hisList) {
							hisList.reloadList();
						}
						var eventsLsit = Ext.getCmp("eventsGrid");
						if (eventsLsit) {
							eventsLsit.reloadList();
						}

					} else
						alert("文件保存失败");
				} catch (e) {
					alert("异常\r\nError:" + e + "\r\nError Code:" + e.number
							+ "\r\nError Des:" + e.description);
				}
			},
			/*
			 * 处理“返回”点击事件
			 */
			handleBack : function() {
//				var wdsxForm = Ext.getCmp("wdsxForm");
//				if (wdsxForm) {
//					wdsxForm.loadData(Ext.getCmp("onlineEditWindow").fileId,
//							Ext.getCmp("onlineEditWindow").objId,this.openType);
//				} else {
//
//				}
				Ext.getCmp("onlineEditWindow").close();
				try {
					document.all.WebOfficeObj.Close();
				} catch (ex) {
				}
			},

			// private
			initComponent : function() {
				zr.dms.OnlineEditWindow.superclass.initComponent.call(this);
				this.addEvents(
						/**
						 * @event okClicked 当确定按钮被点击时触发
						 * @param {zr.dms.CreateFolderWindow}
						 *            this
						 */
						'okClicked',
						/**
						 * @event okClicked 当取消按钮被点击时触发
						 * @param {zr.dms.CreateFolderWindow}
						 *            this
						 */
						'cancelClicked');
			}

		});

/*
 * 历史版本列表
 */
zr.dms.HistoryListGrid = function(config) {
	var proxy = new Ext.data.HttpProxy({
				url : context + '/app/dms.do?method=historyList'
			});
	// create the Data Store
	this.store = new Ext.data.JsonStore({
				root : 'list',
				totalProperty : 'totalSize',
				idProperty : 'PAGINATION_NUMBER',
				remoteSort : true,
				fields : ['PK_DOC_FILEHISTORY', 'PAGINATION_NUMBER',
						'COL_H_FILENAME', 'COL_H_FILESIZE', 'COL_H_VERSION'],

				proxy : proxy
			});
	this.store.setDefaultSort('version', 'desc');
	proxy.on('beforeload', function(proxy, params) {
				params.fileid = this.fileId;
			}, this);
	this.columnModel = new Ext.grid.ColumnModel([{
				id : 'id',
				header : 'id',
				hidden : true,
				dataIndex : 'PAGINATION_NUMBER'
			}, {
				id : 'fk_annex_id',
				header : 'fk_annex_id',
				hidden : true,
				dataIndex : 'PK_DOC_FILEHISTORY'
			}, {
				id : 'filename',
				header : '文件名称',
				width : 300,
				sortable : true,
				dataIndex : 'COL_H_FILENAME'
			}, {
				header : '文件大小(KB)',
				width : 85,
				sortable : true,
				dataIndex : 'COL_H_FILESIZE'
			}, {
				id : 'version',
				header : '版本',
				width : 85,
				sortable : true,
				dataIndex : 'COL_H_VERSION'
			}]);
	this.columnModel.defaultSortable = true;
	this.pt = new Ext.PagingToolbar({
				pageSize : 25,
				store : this.store,
				displayInfo : true
			});

	Ext.apply(this, config);
	zr.dms.HistoryListGrid.superclass.constructor.call(this, {
				title : "修订版本",
				id : 'historyListGrid',
				store : this.store,
				cm : this.columnModel,
				trackMouseOver : true,
				singleSelect : true,
				stripeRows : true,
				autoExpandColumn : 'filename',
				// tbar : this.tb,
				bbar : this.pt,
				stripeRows : true,
				loadMask : {
					msg : '加载数据...'
				}

			});

};

Ext.extend(zr.dms.HistoryListGrid, Ext.grid.GridPanel, {
			/** 当前所在目录id */
			fileId : null,
			/** 分页控制 */
			pt : null,
			/** 新建文件夹对话框 */
			createFolderDialog : null,
			/**
			 * 加载列表数据
			 */
			loadList : function(id) {
				if (this.fileId != id) {
					this.fileId = id;
					// var sm = this.getSelectionModel();
					// sm.clearSelections();
					this.store.load({
								params : {
									start : 0,
									limit : this.pt.pageSize
								}
							});
				}
			},

			/**
			 * 更新列表数据
			 */
			reloadList : function() {
				this.store.reload();
			},

			// private
			/**
			 * 注册事件处理
			 */
			initComponent : function() {
				zr.dms.HistoryListGrid.superclass.initComponent.call(this);
				this.addEvents(
						/**
						 * @event dataLoad 当列表数据加载后触发
						 * @param {zr.dms.HistoryListGrid}
						 *            this
						 */
						'dataLoad');
			}

		});

/*
 * 列表双击事件
 */
function onHisListGridRowDblClicked(grid, rowIndex, e) {
	var selectionModel = grid.getSelectionModel();
	var record = selectionModel.getSelected();
	var fk_annex_id = record.data.PK_DOC_FILEHISTORY;
	/*window.open(context + '/app/dms.do?method=download&fk_annex_id='
			+ fk_annex_id);*/
	var url = context + '/app/dms.do?method=download&fk_annex_id='
			+ fk_annex_id;		
	downloadfile(url);		
}

/**
 * 文档信息tabpanel
 * 
 * @param {}
 *            config
 */
zr.dms.fileInfoTabs = function(config) {

	Ext.apply(this, config);
	zr.dms.fileInfoTabs.superclass.constructor.call(this, {
				id : 'fileInfoTabs',
				region : 'center',
				margins : '3 3 3 0',
				frame : true,
				defaults : {
					autoScroll : true
				}
			});

};

Ext.extend(zr.dms.fileInfoTabs, Ext.TabPanel, {
	// 文件objId
	objId : null,
	// 文件附件id
	objFk_annex_id : null,
	// 当前目录id
	currentfolderid : null,
	// 文档属性
	tab_wdsx : null,
	// 修订版本
	tab_xdbb : null,
	// 工作区
	tab_gzq : null,
	// 事件
	tab_sj : null,
	// 文档授权
	tab_wdsq : null,
	/**
	 * 
	 * @param {}
	 *            record 数据
	 * @param {}
	 *            fileType 文件类型（自己的/共享区）
	 */
	addTab : function(record, openType) {
		this.objFk_annex_id = record.data.id;
		this.objId = record.data.objid;
		this.currentfolderid = Ext.getCmp("fileListGrid").getCurrentCatId();
		if (this.tab_wdsx == null) {
			var wdsxForm = new zr.dms.WdsxForm({
						fileId : record.data.id,
						objId : record.data.objid
					});
			wdsxForm.fileType = record.data.style;
			wdsxForm.getForm().fileType = record.data.style;
			wdsxForm.fileSize = record.data.filesize;
			wdsxForm.loadData(record.data.id, record.data.objid, openType);
			wdsxForm.items.items[5].value = Ext.getCmp("addressBar")
					.getAddress();
			this.tab_wdsx = wdsxForm;
			this.add(this.tab_wdsx);
		} else {
			this.tab_wdsx.fileType = record.data.style;
			this.tab_wdsx.getForm().fileType = record.data.style;
			this.tab_wdsx.fileSize = record.data.filesize;
			this.tab_wdsx.loadData(record.data.id, record.data.objid, openType);
			this.tab_wdsx.items.items[5].setValue(Ext.getCmp("addressBar")
					.getAddress());
		}

//		var style = record.data.style;
//		if (filetypes.indexOf(style) >= 0 ) {
//			Ext.getCmp('editBtn').disabled = true;
//		} else {
//			alert("disable editBtn");
//			Ext.getCmp('editBtn').disabled = false;
//			
//		}

		if (this.tab_xdbb == null) {
			var historyListGrid = new zr.dms.HistoryListGrid();
			historyListGrid.loadList(this.objFk_annex_id);
			this.tab_xdbb = historyListGrid;
			this.add(this.tab_xdbb);
		} else {
			this.tab_xdbb.loadList(this.objFk_annex_id);
		}

		this.tab_xdbb.on('rowdblclick', onHisListGridRowDblClicked, this);

		if (this.tab_sj == null) {
			var eventsList = new zr.dms.EventsGrid();
			eventsList.loadList(this.objFk_annex_id);
			this.tab_sj = eventsList;
			this.add(this.tab_sj);
		} else {
			this.tab_sj.loadList(this.objFk_annex_id);
		}

		// 如果是本人创建的文档则添加“文档授权tab”
		if (openType == "mine") {
			this.tab_wdsq = purviewList4multi(this.objId, record.data.filename,
					'FILEINFO', 'DOC_BVFABRYJMQ', 'purview-handle', '文档授权');
			this.add(this.tab_wdsq);
		} else if (this.tab_wdsq != null) {
			this.remove(this.tab_wdsq);
		}
		this.setActiveTab(0);

	}

});

/**
 * 文档信息窗口
 */
zr.dms.fileInfoWindow = function(config) {
	this.fileInfoTabs = new zr.dms.fileInfoTabs();
	Ext.apply(this, config);
	zr.dms.fileInfoWindow.superclass.constructor.call(this, {
				id : 'fileInfoWindow',
				// closeAction : 'close',
				closeAction : 'hide',
				maximizable : true,
				layout : 'border',
				width : 600,
				height : 400,
				modal : true,
				title : '文档信息',
				listeners : {
					hide : function() {
						Ext.getCmp("MyWorkSpaceGrid").reloadList();
					}
				},
				items : [this.fileInfoTabs]
			});
};

Ext.extend(zr.dms.fileInfoWindow, Ext.Window, {
			/** 当前所在目录id */
			currentfolderid : null,
			/** 文件表记录id */
			fileId : null,
			/** 文件对象id */
			objId : null,
			/** 确定按钮事件处理器 */
			okHandler : null,
			/** 取消按钮事件处理器 */
			cancelHandler : null,
			/** 事件触发时对象的工作域 */
			scope : null,
			/** */
			fileInfoTabs : null,
			/** 文件类型，本人的文件还是共享区的文件(mine/workspace) */
			fileType : null,
			/**
			 * 显示窗口
			 */
			showWindow : function(record) {
				this.fileInfoTabs.addTab(record, this.fileType);
				this.show();
				this.fileInfoTabs.getActiveTab().getEl().mask();
			},

			// private
			initComponent : function() {
				zr.dms.fileInfoWindow.superclass.initComponent.call(this);
				this.addEvents(
						/**
						 * @event okClicked 当确定按钮被点击时触发
						 * @param {zr.dms.fileInfoWindow}
						 *            this
						 */
						'okClicked',
						/**
						 * @event okClicked 当取消按钮被点击时触发
						 * @param {zr.dms.fileInfoWindow}
						 *            this
						 */
						'cancelClicked');
			}

		});

/**
 * 文档属性form
 * 
 * @param {}
 *            config
 */
zr.dms.WdsxForm = function(config) {
	Ext.apply(this, config);

	zr.dms.WdsxForm.superclass.constructor.call(this, {
				id : 'wdsxForm',
				title : "文档属性",
				labelAlign : 'right',
				labelWidth : 85,
				waitMsgTarget : true,
				bodyStyle : 'padding:15px',
				defaults : {
					width : 400,
					msgTarget : 'side'
				},
				// 权限集合属性放在BasicForm中 是因为load()方法中返回的form为BasicForm
				purviewArray : null,
				defaultType : 'textfield',
				items : [{
					fieldLabel : '文档名称',
					name : 'COL_FILENAME',
					readOnly : true
						// id:'COL_FILENAME'
					}, {
					fieldLabel : '创建时间',
					name : 'createtime',
					readOnly : true
				}, {
					fieldLabel : '版本',
					// id : 'COL_VERSION',
					name : 'COL_VERSION',
					readOnly : true
				}, {
					fieldLabel : '状态',
					// id : 'COL_STATE',
					name : 'COL_STATE',
					readOnly : true
				}, {
					fieldLabel : '描述',
					// id : 'COL_FILESUMMARY',
					name : 'COL_FILESUMMARY'
				}, {
					fieldLabel : '文件路径',
					name : 'filepath',
					readOnly : true
				}, {	// id : 'keySet',
					hidden : 'true',
					name : 'keySet'
				}],
				listeners : {
					actioncomplete : handleActivate
				}
			});

	this.addButton({
				text : '保存',
				id : "saveBtn"
			}, function() {
				this.getForm().submit({
					url : context + '/app/dms.do?method=saveFileInfo',
					waitMsg : '提交数据....',
					method : 'POST',
					params : {
						PK_DOC_BVFABRYJMQ : this.fileId,
						okey : 'FILEINFO',
						objkey : 'FILEINFO',
						okid : this.objId
					},
					scope : this,
					success : function(form, action) {
						// var obj =
						// Ext.util.JSON.decode(action.response.responseText);
						Ext.Msg.alert('', '保存成功');
						// 保存成功后刷新列表
						Ext.getCmp("fileListGrid").reloadList();
						Ext.getCmp("workSpaceGrid").reloadList();
						// 执行确定处理
						// this.fireEvent('okClicked', this);
						// form.responseText; // 返回的结果
					},
					failure : function(form, action) {
						if (action.failureType === Ext.form.Action.CONNECT_FAILURE) {
							Ext.Msg.alert('保存失败', 'Status:'
											+ action.response.status + ': '
											+ action.response.statusText);
						}
						if (action.failureType === Ext.form.Action.SERVER_INVALID) {
							// server responded with success = false
							Ext.Msg
									.alert('保存失败',
											action.result.errors.errormsg);
						}

					}
				});
			}, this);
			
	this.addButton({
				text : '在线编辑',
				id : "editBtn"
			}, function() {
				var OnlineEditWindow = new zr.dms.OnlineEditWindow({
							fileType : this.fileType,
							purviewArray : this.getForm().purviewArray
						});
				OnlineEditWindow.showWindow(Ext.getCmp("fileInfoTabs").objId,
						Ext.getCmp("fileInfoTabs").objFk_annex_id, Ext
								.getCmp("fileListGrid").getCurrentCatId(),this.getForm().openType);
			}, this);
			
	this.addButton({
				text : '下载',
				id : "dlBtn"
			}, function() {
				var url = context + '/app/dms.do?method=download&fk_annex_id='
						+ Ext.getCmp("fileInfoTabs").objFk_annex_id
						+ '&fileType=latestversion';

				if (this.fileSize > dlfilesize) {
					Ext.MessageBox
							.confirm(
									'文档下载提示',
									'您要下载的文档较大,系统会自动将文档下载到您的ftp下载目录中,然后您再通过ftp工具将文件下载到本地',
									function(btn) {
										if (btn == 'yes') {
											downloadfile(url);
										}
									});
				} else {
					downloadfile(url);
				}

			}, this);

	

	this.addButton({
				text : '复制',
				id : "copyBtn"
			}, this.showFolderTreeWindow, this);

	this.addButton({
				text : '关闭',
				id : "closeBtn"
			}, this.closeFolderTreeWindow, this);

};

Ext.extend(zr.dms.WdsxForm, Ext.FormPanel, {
	/** 当前所在目录id */
	currentfolderid : null,
	/** 文件表记录id,即附件表对应的Fk_annex_id */
	fileId : null,
	/** 文件对象id */
	objId : null,
	/** 文档属性 */
	fileType : null,
	/* 文档大小 */
	fileSize : null,
	/** */
	openType : null,
	/** 文件夹树窗口 */
	selectFolderTreeWindow : null,

	loadData : function(fileId, objId, openType) {
		this.fileId = fileId;
		this.objId = objId;

		this.getForm().load({
					url : context + '/app/dms.do?method=getFileInfo',
					params : {
						fileId : fileId,
						objId : objId
					},
					success : function(form, action) {
						// 此处的form为Ext.form.BasicForm，调用属性是需使用.getForm().purviewArray
						form.purviewArray = action.result.data.keySet;
						form.openType = openType;

					},
					failure : function(form, action) {
						Ext.Msg
								.alert("文档内容加载失败...",
										action.result.errorMessage);
					}
				});
	},

	/**
	 * 点击“复制”按钮后显示目录树window，供用户选择目标文件夹
	 */
	showFolderTreeWindow : function() {
		if (this.selectFolderTreeWindow == null) {
			this.selectFolderTreeWindow = new zr.dms.selectFolderTreeWindow({
						okHandler : function(dialog, e) {
							var tragetId = this.selectFolderTreeWindow.tragetId;
							// Ext.getCmp("folderTree").reloadNode(tragetId);
							this.selectFolderTreeWindow.hide();
						},
						scope : this
					});
		}
		this.selectFolderTreeWindow.showWindow(this.objId,
				this.items.items[0].value,'copy');

	},
	closeFolderTreeWindow : function() {
		Ext.getCmp('fileInfoWindow').hide();
	}

	,
	/**
	 * 注册事件处理
	 */
	initComponent : function() {
		zr.dms.WdsxForm.superclass.initComponent.call(this);
		this.addEvents(
				/**
				 * @event dataLoad 当表单数据加载后触发
				 * @param {zr.dms.WdsxForm}
				 *            this
				 */
				'dataLoad');
	}

});

/**
 * 文件下载
 * 
 * @param {}
 *            url
 */
function downloadfile(url) {
	Ext.get('dmsdldfrm').dom.src = url;
};

function handleActivate(tab) {
		var style = tab.fileType;
		var fileEditFlag;
		if (filetypes.indexOf(style) >= 0 ) {
			fileEditFlag = true;
		} else {
			fileEditFlag = false;
		}
		
	// 如果是自己的文档则所有按钮均为enable
	if ("mine" == tab.openType) {
		Ext.getCmp('copyBtn').enable();
		Ext.getCmp('saveBtn').enable();
		Ext.getCmp('dlBtn').enable();
		if(fileEditFlag){
			Ext.getCmp('editBtn').enable();
		}else{
			Ext.getCmp('editBtn').disable();
		}
	} else {
		if (tab.purviewArray.indexOf('0') > -1) {
			Ext.getCmp('copyBtn').disable();
			Ext.getCmp('saveBtn').disable();
			Ext.getCmp('editBtn').disable();
			Ext.getCmp('dlBtn').disable();
		}

		if (tab.purviewArray.indexOf('1') > -1) {
			Ext.getCmp('saveBtn').enable();
			if(fileEditFlag){
				Ext.getCmp('editBtn').enable();
			}else{
				Ext.getCmp('editBtn').disable();
			}
		}else{
			Ext.getCmp('editBtn').disable();
			Ext.getCmp('saveBtn').disable();
		}

		if (tab.purviewArray.indexOf('3') > -1) {
			Ext.getCmp('copyBtn').enable();
		}else{
			Ext.getCmp('copyBtn').disable();
		}

		if (tab.purviewArray.indexOf('4') > -1) {
			Ext.getCmp('dlBtn').enable();
		}else{
			Ext.getCmp('dlBtn').disable();
		}

	}

	this.getEl().mask().remove();
}
